package com.controller;

import java.util.Arrays;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.service.ConfigService;
import com.utils.PageUtils;

/**
 * 配置管理相关接口
 *
 * 该类提供了与配置信息（ConfigEntity）相关的增删改查操作。
 * 提供了分页查询、单条信息查询、修改配置等功能。
 *
 * author: team10
 */
@RequestMapping("config")
@RestController
public class ConfigController {

    // 注入配置服务类
    @Autowired
    private ConfigService configService;

    /**
     * 获取配置列表（分页）
     *
     * @param params 查询参数
     * @param config 配置实体对象
     * @return 分页数据
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, ConfigEntity config){
        // 创建查询条件
        EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
        // 调用服务层进行分页查询
        PageUtils page = configService.queryPage(params);
        return R.ok().put("data", page);
    }

    /**
     * 获取配置列表（无权限验证）
     *
     * @param params 查询参数
     * @param config 配置实体对象
     * @return 配置列表
     */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, ConfigEntity config){
        // 创建查询条件
        EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
        // 调用服务层查询分页数据
        PageUtils page = configService.queryPage(params);
        return R.ok().put("data", page);
    }

    /**
     * 获取配置详情（根据ID）
     *
     * @param id 配置ID
     * @return 配置详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        // 根据ID查询配置
        ConfigEntity config = configService.selectById(id);
        return R.ok().put("data", config);
    }

    /**
     * 获取配置详情（无权限验证）
     *
     * @param id 配置ID
     * @return 配置详情
     */
    @IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") String id){
        // 根据ID查询配置
        ConfigEntity config = configService.selectById(id);
        return R.ok().put("data", config);
    }

    /**
     * 根据名称获取配置信息
     *
     * @param name 配置名称
     * @return 配置信息
     */
    @RequestMapping("/info")
    public R infoByName(@RequestParam String name){
        // 使用EntityWrapper查询name为faceFile的配置
        ConfigEntity config = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
        return R.ok().put("data", config);
    }

    /**
     * 保存配置
     *
     * @param config 配置实体对象
     * @return 操作结果
     */
    @PostMapping("/save")
    public R save(@RequestBody ConfigEntity config){
        // 参数验证（可启用 ValidatorUtils）
        // ValidatorUtils.validateEntity(config);
        // 调用服务层保存配置
        configService.insert(config);
        return R.ok();
    }

    /**
     * 修改配置
     *
     * @param config 配置实体对象
     * @return 操作结果
     */
    @RequestMapping("/update")
    public R update(@RequestBody ConfigEntity config){
        // 参数验证（可启用 ValidatorUtils）
        // ValidatorUtils.validateEntity(config);
        // 调用服务层更新配置（全部更新）
        configService.updateById(config);
        return R.ok();
    }

    /**
     * 删除配置
     *
     * @param ids 配置ID数组
     * @return 操作结果
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        // 调用服务层批量删除配置
        configService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}
